<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>290. 单词规律</title>
</head>
<body>
  <script>
  //     给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。

  // 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

  

  // 示例1:

  // 输入: pattern = "abba", s = "dog cat cat dog"
  // 输出: true
  // 示例 2:

  // 输入:pattern = "abba", s = "dog cat cat fish"
  // 输出: false
  // 示例 3:

  // 输入: pattern = "aaaa", s = "dog cat cat dog"
  // 输出: false
  

  // 提示:

  // 1 <= pattern.length <= 300
  // pattern 只包含小写英文字母
  // 1 <= s.length <= 3000
  // s 只包含小写英文字母和 ' '
  // s 不包含 任何前导或尾随对空格
  // s 中每个单词都被 单个空格 分隔

  /**
 * @param {string} pattern
 * @param {string} s
 * @return {boolean}
 */
var wordPattern = function(pattern, s) {
  const word2ch = new Map();
    const ch2word = new Map();
    const words = s.split(' ');
    if (pattern.length !== words.length) {
        return false;
    }
    for (const [i, word] of words.entries()) {
        const ch = pattern[i];
        if (word2ch.has(word) && word2ch.get(word) != ch || ch2word.has(ch) && ch2word.get(ch) !== word) {
            return false;
        }
        word2ch.set(word, ch);
        ch2word.set(ch, word);
    }
    return true;
};
  </script>
</body>
</html>